package com.lwj.se;

import java.io.*;
import java.nio.file.Files;

/**
 * java.io.File
 * File���ڱ�ʾ�ļ�ϵͳ�е�һ���ļ���Ŀ¼��
 *
 * ʹ��File���ǿ���:
 * 1:�������ʾ���ļ���Ŀ¼������(����,��С��)
 * 2:����,ɾ���ļ���Ŀ¼
 * 3:����һ��Ŀ¼�е�����
 *
 * ���ǲ��ܷ����ļ�����.
 */
public class FileDemo {
    public static void main(String[] args) throws IOException {
        /*
         * ����File��Ҫָ��·��
         * ·��������:����·�������·��
         * ����·��ͨ��������,��Ȼ��������,
         * �����޷�������ƽ̨.
         *
         * ���·������ֱ�����ֳ�ʵ��λ��,����
         * ����Ӧ���ֲ�ͬ���л���.
         * ����Ŀ��ִ�д���ʱ,"./"��ǰĿ¼
         * ָ�ľ��ǵ�ǰ��ĿĿ¼
         */
        File file = new File("./demo.txt");
        //��ȡ�ļ���
        String name = file.getName();
        System.out.println(name);
        //��ȡ����(��λ���ֽ�)
        long len = file.length();
        System.out.println(len+"�ֽ�");
        //��ȡ����·��
        String path = file.getAbsolutePath();
        System.out.println(path);
        /*
         * �Ƿ�ɶ�,��д,�Ƿ�Ϊ�����ļ�
         */
        boolean cr = file.canRead();
        boolean cw = file.canWrite();
        boolean ih = file.isHidden();
        System.out.println("�ɶ�:"+cr);
        System.out.println("��д:"+cw);
        System.out.println("�����ļ�:"+ih);
        /*
         * boolean exists()
         * �жϵ�ǰFile��ʾ���ļ���Ŀ¼�Ƿ�
         * �Ѿ�����,�����򷵻�true
         */
        if(!file.exists()) {
            //�������ļ�
            file.createNewFile();
            System.out.println("�ļ��Ѵ���!");
        }else {
            System.out.println("�ļ��Ѵ���!");
        }
        if(file.exists()) {
            file.delete();
            System.out.println("�ļ���ɾ��!");
        }else {
            System.out.println("�ļ�������!");
        }

        //��ȡ��ǰĿ¼�е���������
        File dir = new File(".");
        /*
         * boolean isFile()
         * �жϵ�ǰFile��ʾ���Ƿ�Ϊ�ļ�
         *
         * boolean isDirectory()
         * �жϵ�ǰFile��ʾ���Ƿ�ΪĿ¼
         */
        if(dir.isDirectory()) {
            /*
             * File[] listFiles()
             * ��ȡ��ǰĿ¼�е���������,������ÿһ��
             * Ԫ�ؾ�������һ������
             */
            File[] subs = dir.listFiles();
            for(int i=0;i<subs.length;i++) {
                File sub = subs[i];
                System.out.println(sub.getName());
            }
        }
    }
    /*
     * �ݹ�ɾ���ļ�
     * ɾ��ʱ�����ж�file��ʾ���Ƿ�ΪĿ¼
     * �����ļ���ֱ��ɾ��,����Ŀ¼��Ӧ��ǰ
     * ��ȡ��Ŀ¼����������ɾ������ɾ��
     * ��Ŀ¼.
     */
    public static void delete(File file) {
        if(file.isDirectory()) {
            //�Ƚ���Ŀ¼���
            //1��ȡ��Ŀ¼�е���������
            File[] subs = file.listFiles();
            //2���ɾ������
            for(int i=0;i<subs.length;i++) {
                File sub = subs[i];
                /*
                 * �ݹ����:һ�������ڲ�����
                 * �Լ�����������.
                 */
                delete(sub);
            }
        }
        file.delete();

    }

    /**
     * �����ļ�
     */
    public void filter(String path){
        /*
         * ��ȡ��ǰĿ¼������������"."��ͷ������
         */
        File dir = new File(path);
        if(dir.isDirectory()) {
			MyFilter filter = new MyFilter();
            //�ص�ģʽ
            File[] subs = dir.listFiles(filter);
            System.out.println(subs.length);
            for(int i=0;i<subs.length;i++) {
                File sub = subs[i];
                System.out.println(sub.getName());
            }
        }
    }
    class MyFilter implements FileFilter {
        public boolean accept(File file) {
            String name = file.getName();
            System.out.println("���ڹ���:"+name);
            return name.startsWith(".");
        }
    }

    /**
     * java.io.RandomAccessFile
     * RAF��ר��������д�ļ����ݵ�API,�����ָ��
     * ���ļ�����λ�ý��ж�д.
     * @throws Exception
     */
    public void read() throws Exception {
        RandomAccessFile raf
                = new RandomAccessFile(
                "raf.dat","r");
        /*
         * int read()
         * ���ļ��ж�ȡ1���ֽ�,����int��ʽ
         * ����.������ֵΪ-1���ʾ�ļ�ĩβ
         *
         * 00000000 00000000 00000000 11111111
         */
        int d = raf.read();
        System.out.println(d);

        d = raf.read();
        System.out.println(d);

        System.out.println("��ȡ���!");
        raf.close();

        /*
         * �Ե�ǰĿ¼�µ�raf.dat�ļ���д����
         */
        RandomAccessFile raf1
                = new RandomAccessFile(
                "./raf.dat","rw");
        /*
         * void write(int d)
         * ���ļ���д��1���ֽ�,д����Ǹ�����intֵ
         * ����Ӧ2���Ƶ�"�Ͱ�λ"
         *                            vvvvvvvv
         * 00000000 00000000 00000000 00000001
         */
        raf1.write(1);

        System.out.println("д�����!");
        raf1.close();
    }

    /**
     * �����ļ�
     * @throws IOException
     */
    public void copy() throws IOException {
        File source=new File("./a.txt");
        File dest=new File("./b.txt");
        Files.copy(source.toPath(), dest.toPath());

    }

    /**
     * ʹ���ļ��������ļ�
     * @throws IOException
     */
    public void copy1() throws IOException {
        /*
         * 1:�����ļ���������ȡԭ�ļ�
         * 2:�����ļ����������д�����ļ�
         * 3:ѭ����ԭ�ļ���ȡ�ֽ�д�뵽�����ļ���
         * 4:�ر�������
         */
        FileInputStream fis
                = new FileInputStream("movie.mp4");
        FileOutputStream fos
                = new FileOutputStream("movie_cp.mp4");

        int len = -1;//��¼ÿ��ʵ�ʶ�ȡ���ֽ���
        byte[] data = new byte[1024*10];

        while((len = fis.read(data))!=-1) {
            fos.write(data,0,len);
        }

        System.out.println("�������!");

        fos.close();
        fis.close();
    }
    /**
     * ʹ�û����������ļ�
     * ������
     * java.io.BufferedOutputStream
     * java.io.BufferedInputStream
     *
     * ��������һ�Ը߼���,���������е���������߶�дЧ��
     * ʹ�������ڽ��ж�д����ʱ�õ��ֽڶ�дҲ����߶�д��
     * Ч��.
     *
     *
     * ������֮���Կ�����߶�дЧ��,����Ϊ�������ڲ���
     * һ��������(һ���ֽ�����),��������ʹ�û���������
     * ���ֶ�д(���ֽڻ���д)���ն��ᱻ������ת��Ϊ
     * ���д�����Ч��
     * @throws IOException
     */
    public void copy2() throws IOException {
        FileInputStream fis
                = new FileInputStream("music.mp3");
        BufferedInputStream bis
                = new BufferedInputStream(fis);


        FileOutputStream fos
                = new FileOutputStream("music_cp2.mp3");
        BufferedOutputStream bos
                = new BufferedOutputStream(fos);

        int d = -1;
        while((d = bis.read())!=-1) {
            bos.write(d);
        }

        System.out.println("�������!");
        bis.close();
        bos.close();
    }

    /**
     *  ����������
     * @throws Exception
     */
    public void readObject() throws Exception {
        /*
         * ��person.obj�ļ��еĶ����ȡ����
         */
        FileInputStream fis
                = new FileInputStream("person.obj");
        ObjectInputStream ois
                = new ObjectInputStream(fis);

        Person p = (Person)ois.readObject();
        System.out.println(p);

        ois.close();
    }
    /**
     *  ���������
     * @throws Exception
     */
    public void writeObject() throws Exception {
        /*
         * ��һ��Personʵ��д���ļ�person.obj��
         */
        String name = "����ʦ";
        int age = 18;
        String gender = "Ů";
        String[] otherInfo = {"��һ����Ա","������дë����","����һ��˫��̥","�ٽ������Ļ�����"};

        Person p = new Person(name, age, gender, otherInfo);

        FileOutputStream fos
                = new FileOutputStream("person.obj");
        ObjectOutputStream oos
                = new ObjectOutputStream(fos);
        /*
         * �÷��������׳�:NotSerializableException
         * ��д���Ķ�����������û��ʵ��Serializable�ӿ�
         * ʱ�ͻ��׳����쳣.
         *
         * д���ļ����ָ��ļ���ʵ���������ȵ�ǰ����
         * ���������Ҫ��,������Ϊ�����ֽڳ��˰�����
         * �ö���������⻹���������Ľṹ��Ϣ.
         */
        oos.writeObject(p);
        oos.flush();
        System.out.println("д�����!");

        oos.close();
    }
    /**
     * �ļ�����RandomAccessFile������:
     * RAF�ǻ���ָ��������д��ʽ,���Զ��ļ�����
     * λ�ý��ж���д����,�����������ļ���������
     * ���ǵȲ���.��д�����.
     *
     * �ļ����ǻ���java IO�ı�׼��д,��IO��˳��
     * ��дģʽ,��:ֻ�����д�������,���ܻ���.
     *
     * ���Ӷ�д��������RAF�������ļ�����,����
     * �ļ������Ի���java IO�����������һ������
     * ���ݵĶ�д,����RAF������������.
     *
     */
}
